package customerEnter.Frame.JDBCDao.Interface;

import java.util.List;

@SuppressWarnings({ "hiding", "rawtypes" })
public interface DaoFrameDMLBaseInterfaces<T, K> {
	/**
	 * 查找這個表裡面所有數據返回 bean的所有屬性 有缓存
	 */

	<T> List<K> findAll(String tableName, Class<K> class1);

	/**
	 * 
	 * 根據id查找單個值 有缓存
	 */
	K findId(Integer id, String tableName, Class<K> class1);

	/**
	 * 根據條件查找 有缓存
	 */

	List<K> findSeleList(String where, String tableName, Class<K> class1);

	/**
	 * 根據條件查找（填寫表名） 无缓存
	 */
	<K> List<K> findSeleList(String Front, String ClassName, String where, Class<K> class1);

	/**
	 * 根據條件查找數據數量 无缓存
	 */
	List<K> findSeleCont(String Front, String ClassName, String where, Class<K> class1);

	/**
	 * 根據條件查找（可查找數據傳輸類型 單次查詢 有緩存） //要記得在條件 參數 添加and。。
	 */
	public <A> List<A> findSelecClasses(String Front, String ClassName, String where, Class<A> Class);

	/**
	 * 根據條件查找（可查找數據傳輸類型 可多重查詢 有緩存） 沒有where 1=1
	 */
	<T> List<T> findSelecJoinOnTable(String Front, String ClassName, String where, Class<T> Class);

	/**
	 * 根據條件查找（可查找數據傳輸類型 單次查詢 無緩存）
	 */
	<T> List<T> findSelecNoEachClasses(String Front, String ClassName, String where, Class<T> Class);

	/**
	 * 根據條件查找 可以查詢 關係一對多和一對一（可查找數據傳輸類型 單次查詢 無緩存）
	 */
	<T> List<T> findSelecNoEachOneOrMay(String Front, String ClassName, String where, Class<T> Class);

	/**
	 * 根據條件查找 可以查詢 關係一對多和一對一（可查找數據傳輸類型 單次查詢 有緩存）
	 */
	<T> List<T> findSelecEachOneOrMay(String Front, String ClassName, String where, Class<T> Class);

	/**
	 * 根據條件查找（可查找數據傳輸類型 單次查詢 無緩存 返回單個對象）
	 * 
	 * @param <OBj>
	 *            傳入的類型參數
	 */
	<Other> Other findSelecNoEachSingle(String Front, String ClassName, String where, Class<Other> Class);

	/**
	 * 查詢數據 沒有緩存
	 */
	<Transmission> List<Transmission> findTransmissionData(String Front, String ClassName, String where,
			Class<Transmission> Class);

	/**
	 * 查詢統計數據
	 */
	<T> T findCountData(String Front, String ClassName, String where);

	/**
	 * 分頁查詢數據 有緩存 自动排序 只需要写排序的字段名
	 */
	<Transmission> List<Transmission> findPagingTransmissionCacheData(String Front, String ClassName, String where,
			int size, int page, String order, String descOrAsc, Class<Transmission> Class);

	/**
	 * 分頁查詢數據 沒有緩存 自动排序 只需要写排序的字段名 根據時間排序
	 */
	<Transmission> List<Transmission> findPagingTransmissionData(String Front, String ClassName, String where,
			int size, int page, String order, String descOrAsc, Class<Transmission> Class);

	/**
	 * 分頁查詢數據 有緩存 自动排序 只需要写排序的字段名 根據時間排序（使用此類）
	 */
	<Transmission> List<Transmission> findPagingTransmissionCacheData(String Front, String ClassName, String where,
			int size, int page, String order, String descOrAsc, int position, Class<Transmission> Class);

	/**
	 * 分頁查詢數據 沒有緩存 自动排序 只需要写排序的字段名（使用此類）
	 */
	<Transmission> List<Transmission> findPagingTransmissionData(String Front, String ClassName, String where,
			int size, int page, String order, String descOrAsc, int position, Class<Transmission> Class);

	/**
	 * 分頁查詢數據 有緩存,自动排序 只需要写排序的字段名
	 */

	ParametersResultInterface findPagingParametersResultCacheData(String Front, String ClassName, String where,
			int size, int page, String order, String descOrAsc, Class<?> Class);

	/**
	 * 分頁查詢數據 沒有緩存 自动排序 只需要写排序的字段名
	 */
	ParametersResultInterface findPagingParametersResultData(String Front, String ClassName, String where, int size,
			int page, String order, String descOrAsc, Class<?> Class);

	<DaoAutomatic> DaoAutomatic queryDMLId(int id, String tableName, Class<DaoAutomatic> Class);

	/**
	 * 返回的數據是單行
	 * 
	 * map
	 */
	<DaoAutomatic> DaoAutomatic querySingleMap(String Front, String ClassName, String where);

	/**
	 * 返回的數據是單行
	 * 
	 * Listmap
	 */
	<DaoAutomatic> DaoAutomatic querySingleListMap(String Front, String ClassName, String where);

	/**
	 * 返回的數據是單行
	 * 
	 * Listmap
	 */
	<DaoAutomatic> List<DaoAutomatic> querySingleListPageMap(String Front, String ClassName, String where, int size,
			int page, String order, String descOrAsc, int position);

	/**
	 * 返回的數據是單行
	 * 
	 * string <DaoAutomatic> DaoAutomatic querySingleString(String Front, String
	 * ClassName, String where, Class<DaoAutomatic> Class);
	 * 
	 * /** 返回的數據是單行
	 * 
	 * string[]
	 */
	<DaoAutomatic> DaoAutomatic querySingleListObjects(String Front, String ClassName, String where);

	/**
	 * 返回的數據是單行
	 * 
	 * 
	 * 
	 * string
	 */
	<DaoAutomatic> DaoAutomatic querySingleString(String Front, String ClassName, String where);

	/**
	 * 返回的數據是單行 bean
	 * 
	 * 
	 */
	<DaoAutomatic> DaoAutomatic querySingleDate(String Front, String ClassName, String where, Class<DaoAutomatic> Class);

	/**
	 * 添加 映射表 根據對象的屬性名和數據庫裡面的字段想對應
	 */

	<T> T saveTable(String Table, Object MappingObject);

	/**
	 * 添加 映射表 根據對象的屬性名和數據庫裡面的字段想對應
	 */
	<T> T saveTableReturnId(String Table, Object MappingObject);

	/**
	 * 修改數據庫 映射對象到數據庫
	 */

	<T> T UpdateTable(String TableName, Object MappingObject, String where);

	/**
	 * 批量增加數據
	 * 
	 * @param <Transmission>
	 */

	<Transmission> Object InsertBatch(String TableName, List<Transmission> t, Class<Transmission> class1);

	/**
	 * 根據id刪除數據
	 */

	Integer deleteObject(String TableName, int id);

	/**
	 * 根據條件刪除
	 */

	Integer deleteObject(String TableName, String where);

	/**
	 * --------------------------------------------------
	 */
	public <T> T savePreparedStatementReturnId(String Table, Object[] objects);

	/**
	 * --------------------------------------------------
	 */
	public <T> T savePreparedStatementBatch(String Table, List<Object[]> objects);

	public <T> T UpdatePreparedStatement(String TableName, String where, Object[] objects);

	/**
	 * 批量修改
	 */
	<Transmission> Transmission UpdatePreparedStatementBatch(String TableName, String where, List<Object[]> objects);
}
